#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
新浪财经汇率获取系统
通过新浪财经API获取历史汇率数据
"""

import os
import sys
from datetime import datetime, timedelta
from modules.sina_forex_fetcher import SinaForexFetcher
from modules.data_processor import ForexDataProcessor
from modules.utils import setup_logging, create_directories

def main():
    """
    主程序入口
    """
    print("🌍 新浪财经汇率获取系统启动...")
    print("=" * 60)
    
    # 创建必要目录
    create_directories()
    
    # 设置日志
    logger = setup_logging()
    
    # 初始化获取器和处理器
    fetcher = SinaForexFetcher()
    processor = ForexDataProcessor()
    
    # 主要货币对配置（新浪财经的货币对代码）
    currency_pairs = {
        'USDCNY': '美元/人民币',
        # 'EURCNY': '欧元/人民币', 
        # 'GBPCNY': '英镑/人民币',
        # 'JPYCNY': '日元/人民币',
        # 'EURUSD': '欧元/美元',
        # 'GBPUSD': '英镑/美元',
        # 'USDJPY': '美元/日元',
        # 'AUDUSD': '澳元/美元',
        # 'USDCHF': '美元/瑞士法郎',
        # 'USDCAD': '美元/加元'
    }
    
    # 设置时间范围（最近30天）
    end_date = datetime.now()
    start_date = end_date - timedelta(days=30)
    
    try:
        print(f"📅 获取时间范围: {start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}")
        print("📈 开始获取汇率数据...")
        
        all_forex_data = {}
        
        # 遍历每个货币对获取数据
        for symbol, name in currency_pairs.items():
            print(f"\n🔄 正在获取 {name} ({symbol}) 数据...")
            
            try:
                # 获取历史汇率数据
                forex_data = fetcher.get_historical_rates(
                    symbol, start_date, end_date
                )
                
                if forex_data.shape[0]>0 and not forex_data.empty:
                    all_forex_data[symbol] = {
                        'name': name,
                        'data': forex_data
                    }
                    print(f"✅ {name} 数据获取成功！共 {len(forex_data)} 条记录")
                    
                    # 显示最新汇率
                    latest_rate = forex_data.iloc[-1]
                    print(f"📊 最新汇率: {latest_rate['close']:.4f} ({latest_rate['date']})")
                    
                else:
                    print(f"⚠️ {name} 数据获取失败或为空")
                    
            except Exception as e:
                print(f"❌ 获取 {name} 数据时出错: {str(e)}")
                logger.error(f"获取 {symbol} 数据失败: {str(e)}")
                continue
            
            # 添加延迟避免请求过快
            import time
            time.sleep(1)
        
        if not all_forex_data:
            print("❌ 没有获取到任何汇率数据！")
            return 1
        
        # 数据处理和分析
        print("\n🔍 开始数据处理和分析...")
        processed_data = processor.process_all_data(all_forex_data)
        
        # 生成统计报告
        print("\n📊 生成统计报告...")
        statistics = processor.generate_statistics(processed_data)
        
        # 显示结果
        print("\n" + "=" * 60)
        print("📋 汇率统计摘要:")
        print("=" * 60)
        
        for symbol, stats in statistics.items():
            name = all_forex_data[symbol]['name']
            print(f"\n💱 {name} ({symbol}):")
            print(f"   当前汇率: {stats['current_rate']:.4f}")
            print(f"   平均汇率: {stats['avg_rate']:.4f}")
            print(f"   最高汇率: {stats['max_rate']:.4f}")
            print(f"   最低汇率: {stats['min_rate']:.4f}")
            print(f"   波动率: {stats['volatility']:.4f}")
            print(f"   涨跌幅: {stats['change_percent']:.2f}%")
        
        # 保存数据
        print("\n💾 保存数据到文件...")
        processor.save_to_files(processed_data, 'data/')
        
        # 生成可视化图表
        print("\n📈 生成汇率走势图...")
        processor.create_visualizations(processed_data, 'data/')
        
        print("\n🎉 汇率获取系统运行完成！")
        print("📁 数据文件已保存到 data/ 目录")
        
    except Exception as e:
        print(f"❌ 系统运行出错: {str(e)}")
        logger.error(f"系统运行出错: {str(e)}")
        return 1
    
    return 0

if __name__ == "__main__":
    sys.exit(main())
